class SequenceStack:
    def __init__(self):
        self.MaxStackSize = 10  # 栈存储最大元素
        self.s = [None for x in range(0, self.MaxStackSize)]  # 列表每个元素设置为空
        self.top = -1  # 栈设置为空

    # 初始化一个顺序栈SequenceStack
    def CreateStackByInput(self):
        data = input("请输入元素(继续输入请按回车，结束输入请按“#”：")
        while data != '#':
            self.PushStack(data)
            data = input("请输入元素：")

    # 元素进栈的函数
    def PushStack(self, x):
        if self.top < self.MaxStackSize - 1:  # 判断栈没满
            self.top = self.top + 1  # 修改栈指针指向下一个空闲位置
            self.s[self.top] = x  # 将元素放入空闲位置
        else:
            print("栈满")
            return

    # 判断栈是否为空的函数
    def IsEmptyStack(self):
        if self.top == 1:
            iTop = True
        else:
            iTop = False
        return iTop

    # 依次访问栈中元素的函数
    def StackTraverse(self):
        if self.IsEmptyStack():
            print("栈为空")
            return
        else:
            print("\n栈内的元素为：\n", end='')
            for i in range(0, self.top+1):
                print(self.s[i], end=' ')

    # 获取当前栈顶元素的函数
    def GetTopStack(self):
        if self.IsEmptyStack():
            print("栈为空")
            return
        else:
            print("\n栈顶元素为：\n", self.s[self.top])
            return self.s[self.top]

    # 输出当前栈长度的函数
    def GetStackLength(self):
        if self.IsEmptyStack():
            print("栈为空")
            return
        else:
            print("\n栈的长度为：\n", self.top+1)
            return self.top+1

    # 元素出栈的函数
    def PopStack(self):
        if self.IsEmptyStack():
            print("栈为空")
            return
        else:
            iTop = self.top
            self.top = self.top-1
            return self.s[iTop]
# (1)	初始化一个顺序栈SequenceStack
# (2)	判断栈是否为空
# (3)	将元素1、5、16、依次进栈
# (4)	遍历栈内所有元素
# (5)	获取栈顶元素
# (6)	获取栈的长度
# (7)	将栈中元素出栈并输出
if __name__ == '__main__':
    s = SequenceStack()
    s.CreateStackByInput()
    s.IsEmptyStack()
    s.PushStack(1)
    s.PushStack(5)
    s.PushStack(16)
    s.StackTraverse()
    s.GetTopStack()
    s.GetStackLength()
    s.PopStack()
    s.StackTraverse()

